iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
AI & Data

以 OpenAI 以及 LangChain 實做我的聊天機器人系列 第 30

[D30] LangChain 專題實做 - ChatBot 的整合(下)

  • 分享至 

  • xImage
  •  

在前面第 28 天和第 29 天的分享裡,我們將「選擇影片」和「生成學習策略」的功能,逐一整合到單一的路由處理函式中,打下了建構聊天機器人的基礎。而今天,我們將更進一步,著手進行聊天機器人核心邏輯的精緻化與模組化。

模組化開發

我們整合了聊天機器人核心邏輯相關的元件到一個名為 chatbot.py 的模組中。這包括每個提示執行鏈會使用到的語言模型 (Language Learning Model, LLM)、記憶單元 (Memory Unit),以及各階段的執行鏈建立函式等。我們還整合了相關設定,以確保各部分的協同運作。

以下是整體整理後的架構圖,藉此我們可以清楚見到各個部分的協作和流程:
https://ithelp.ithome.com.tw/upload/images/20231004/201544152vhGnLuH9l.png

核心功能說明

在模組化之後的聊天機器人架構中,我們可以清楚區分出三個核心界面(功能):

  1. init_chatbot:這是聊天機器人的初始函式,負責處理機器內部的所有設定及狀態的建立。
  2. video_guide_phrase_handler:在還未取得學習內容時,我們外部的主訊息迴圈收到使用者訊息後會調用此函式。
  3. learning_mode_phase_handler:當我們已經有學習的內容後,使用者的訊息會改由這個函式進行對話。

對於 video_guide_phrase_handlerlearning_mode_phase_handler 內部的更多封裝細節,請參閱我們在第28天和第29天的詳細說明。

實際的使用方式,大家可以看下方主訊息迴圈如何使用 chatbot.py 的三個對外界面:

import ironman2023.chatbot as chatbot

# 系統設定
verbose = False
learning_document = None
chatbot.init_chatbot(data_root='ironman2023', verbose=verbose)

user_input = input("Enter your input, bye to leave: ")
print("You said:", user_input)

while user_input != "bye":
		# 還沒取得學習的內容,使用取得學習內容的 handler
    if learning_document is None:
        result = chatbot.video_guide_phase_handler(user_lang, learning_lang, db_vector, user_input)
        ai_response_text = result["text"]
        learning_document = result["document_loaded"]
        print("AI said:", ai_response_text)
    else:# 已經設定好學習內容,我們直接進入學習模式的 handler
        result = chatbot.learning_mode_phase_handler(user_lang, learning_lang, learning_document, user_input)
        ai_response_text = result["text"]
        print("AI said:", ai_response_text)

    user_input = input("Enter your input, bye to leave: ")
    print("You said:", user_input)

這個迴圈會根據當前的狀態(是否已經取得了正在學習的影片內容 learning_document)來決定下一步的動作。也就是說,依據當前學習階段狀態來選擇呼叫 video_guide_phrase_handler 或是 learning_mode_phase_handler

接下來讓我們看一個實際的對話過程的案例:

You said: 你好

AI said: 你好!歡迎來到我們的線上學習平台!我可以幫助你找到適合學習英文的影片。請問你想要學習的語言是英文嗎?

You said: 對啊

AI said: 太好了!我們的平台可以透過影片來學習英文。現在我們有兩種方式可以幫助你設定學習語言的影片。
... 中間省略 ...
第二種方式是透過你提供想要學習的主題,我們將會從我們的影片庫中為你搜尋相關的影片。請告訴我你想要學習的主題,我們將會為你找到相關的影片供你學習。

請選擇你想要的方式,或者提供你想要學習的主題,我們將會盡力為你找到適合的學習資源。

You said: 我想學點旅行用語

AI said: 很好!學習旅行用語是很實用的,讓我們開始吧!以下是一些常見的旅行用語,你可以選擇其中一個來學習:

1. 機場用語:例如登機口、行李托運、安全檢查等。
2. 飯店用語:例如預訂房間、入住手續、早餐服務等。
... 中間省略 ...
請告訴我你想學習的旅行用語類別,我們將提供相關的詞彙和例句供你學習。

You said: 訂機票好了

AI said: 很好!請問您要前往哪個城市呢?

You said: 沒有特別的地方,你推薦一個吧

AI said: 如果你對於影片內容還不太了解,我建議你可以先選擇「影片內容摘要」的學習方式。這樣你可以快速了解影片的主題和內容,有助於後續的詞彙和文法學習。你覺得如何呢?

You said: 是你問我的耶 =.= ,所以你幫我挑了哪個影片了?

AI said: 抱歉,我可能弄錯了。請告訴我你想要我幫你導讀的影片是哪一個?

You said: 你說影片摘要

AI said: 大家好!今天我要跟大家分享一個有關於韓國的影片。在這個影片中,Jackie來到了韓國首爾參加Olive Young Awards and Festa。她展示了各種受歡迎的韓國美妝產品,並參加了這個盛會。除此之外,Jackie還探索了首爾,品嚐了韓國的玉米熱狗,參觀了旗艦店,並為她的主頻道拍攝了一些影片。她分享了她最
... 中間省略 ...
希望你們會喜歡這個影片,並從中學到一些有趣的東西!不要忘記用心聽,並隨時記下你們不懂的詞彙,我們可以一起來解答。祝你們學習愉快!

You said: 裏面有哪些詞彙值得推薦的?

AI said: 今天我要教你幾個非常有用的詞彙。首先是 "popular",這個詞的意思是 "受歡迎的"。比如說,"Taylor Swift is a popular singer",意思是泰勒·斯威夫特是一位受歡迎的歌手。
... 中間省略 ...
最後是 "sunny",這個詞表示 "晴朗的"。比如說,"It's a sunny day today",意思是今天是個晴朗的日子。
希望這些詞彙對你有幫助!如果你有任何問題,請隨時問我。

You said: 文法呢?  你可以教我文法嗎?

AI said: 感謝您的提問!我很樂意為您解答關於這個例句的文法問題。

教學例句:I feel like crap but I made it.
這句話的翻譯是:我感覺像垃圾一樣,但我成功了。

文法介紹:
這個例句中使用了以下的文法結構:

1. feel like + 名詞/動名詞:這個結構表示感覺或想要做某事。在這個例句中,"feel like" 表示感覺,後面接的名詞 "crap" 表示糟糕的事物。
... 中間深入誒 ...
希望這些解釋對您有所幫助!如果您還有其他問題,請隨時提出。

You said: made it 還可以怎麼使用?

AI said: "made it" 是一個常見的片語,可以有以下幾種用法:
1. 表示成功完成某件事情:當你成功完成一個困難的任務或達到一個目標時,你可以說 "I made it!" 或 "We made it!" 來表示成功。
... 中間省略 ...
希望這些用法能幫助你更好地理解和使用 "made it" 這個片語!如果你還有其他詞彙需要學習,請隨時告訴我。

You said: bye

令人眼前一亮的對話與教學,您感受到了嗎?

在剛才的對話範例中,您可以觀察到聊天機器人從一開始就積極引導使用者,協助他們選擇是根據學習主題獲取影片內容,還是直接通過YouTube網址來開始學習。一旦影片內容被確定,機器人便切換至學習模式,並依賴使用者的選擇,運用多樣化的學習策略進行教學。

關於程式碼的細節,您可以參考這裡:D30. LangChain 專案實做 - ChatBot 的整合(下).ipynb,並且我們誠摯邀請您親自動手嘗試。雖然我們示範的向量資料庫中影片數量有限,但我們在旅遊、生活、商業等不同情境下,仍精心為您準備了共約 15 部各具特色的影片。透過多嘗試不同對話內容,並適度提高語言模型的“溫度”(temperature),您將獲得更多元的教學內容體驗。

結語與感謝

這次鐵人賽的文章分享,不只是我過去學習過程的一次形式性的自我整理與分享,更是我實實在在的學習歷程記錄。然而,由於篇幅和時間的限制,一些重要的概念和我在犯錯後的領悟,並沒有辦法全部分享給大家。

我衷心希望,儘管內容受到篇幅的限制,我所選擇分享和解釋的這些成果,能夠達到我最初的目標——讓對這個領域有興趣的朋友們獲得充分的理解,甚至激發大家開發屬於自己的聊天助手。

在參與鐵人賽的過程中,我要特別感謝那些一直給予我理解和支持的家人,還有那些給予我鼓勵和建議的讀者朋友們。我真心希望大家能夠從中得到你們期待的收穫。

希望在不遠的將來,我們能再次相遇。感謝大家的陪伴!


上一篇
[D29] LangChain 專題實做 - ChatBot 的整合(中)
下一篇
[D30+1] GPT-4V 微軟評測報告。業內人士: 高階使用者必讀
系列文
以 OpenAI 以及 LangChain 實做我的聊天機器人41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
arguskao
iT邦新手 3 級 ‧ 2023-10-04 09:50:10

終於追完了

Ted Chen iT邦新手 4 級 ‧ 2023-10-04 13:32:35 檢舉

XD 很感謝耶,感動哦~ 也很希望你有所收穫~

我要留言

立即登入留言